<?php
use think\Db;
//以下是删除相关的方法
function childid($priid){
    $data = $this->select();
    return $this->getchildid($data,$priid);
}
function getchildid($data,$parentid){
    static $ret = array();
    foreach ($data as $k => $v){
        if($v['parentid'] == $parentid){
            $ret[] = $v['id'];
            $this->getchildid($data,$v['id']);
        }
    }
    return $ret;
}   
/* 钩子函数，例如：删除主栏目之前，先查找删除所有子栏目，之后再删除主栏目
_before_delete在执行删除栏目之前，先执行此函数*/
function _before_delete($options){
    //单独删除时候id的值，是一个字符串，是一个单独的id
    if(is_array($options['where']['id'])){
        $arr = explode(',', $options['where']['id'][1]);
        $soncates = array();
        foreach ($arr as $k => $v) {
            $soncates2 = $this->childid($v);
            $soncates = array_merge($soncates,$soncates2); //合并两个数组
        }
        $soncates = array_unique($soncates);  //去重复数组
        $childrenids = implode(',', $soncates);
    }else{   //单个批量删除
        $childrenids = $this->childid($options['where']['id']);
        $childrenids = implode(',', $childrenids);
    }
    if($childrenids){
        $this->execute("delete from cs_privilege where id in($childrenids)");				
    }
} 
/**
 * 判断当前管理员的权限
 * @param string $nav_name 菜单名称
 * @param string $action_type 操作类型
 * @return bool
 */
function check_role($navName,$actionType)
{
    $model=get_manager_model(session('managerId'));
    if(!$model)
    {
        return false;
    }
    $roleModel=Db::name('manager_role')->where('id',$model['role_id'])->find();
    if($roleModel)
    {
        if($roleModel['role_type']==1)
        {
            return true;
        }
        $result=Db::name('manager_role_value')->where(['role_id'=>$roleModel['id'],'nav_name'=>$navName,'action_type'=>$actionType])->find();
        if($result)
        {
            return true;
        }
    }
    return false;
}
/**
 * 公共函数，返回转换后的json数据
 * @param int $code 返回码 一般情况下0代表成功 1代表失败
 * @param string $msg 返回信息说明
 */
function json_msg($code,$msg)
{
    exit(json_encode(['code'=>$code,'msg'=>$msg],320));
}
/**
 * 公共函数，返回转换后的多维json数据
 * @param int $code 返回码 一般情况下0代表成功 1代表失败
 * @param string $msg 返回信息说明
 * @param string $data 可以是数据组或者是字符串
 */
function json_msg_data($code,$msg,$data)
{
    exit(json_encode(['code'=>$code,'msg'=>$msg,'data'=>$data],320));
}
/**
 * 获取远程图片并存储，比如获取微信头像
 * @access public
 * @param string $remoteImgUrl 远程图片地址，如http://www.bojuwang.com/test.jpg
 * @return string
 */
function get_remote_img($remoteImgUrl)
{
    $header = array(
            'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0',      
            'Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',      
            'Accept-Encoding: gzip, deflate',
    );
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $remoteImgUrl);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER,$header);
    $dataimg = curl_exec($curl);
    $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    curl_close($curl); 
    //请求成功状态码200 
    if ($code == 200) {     
        $imgBase64Code = "data:image/jpeg;base64," . base64_encode($dataimg);
    }  
    $img_content=$imgBase64Code;
    if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $img_content, $result)){   
        $type = $result[2];
        if(strtolower($type)=='jpeg')
        {
            $type='jpg';
        }
        //此处不添加物理根目录，方便路径保存到数据库
        $imgUrl = 'public' . DS . 'upload'. DS . 'avatar' . DS .md5(uniqid(mt_rand())).'.'.$type; 
        if (file_put_contents(ROOT_PATH . $imgUrl, base64_decode(str_replace($result[1],'', $img_content))))  
        {  
            return '/'.$imgUrl;
        }
    }
    return '';
}
/**
 * 极光（jiguang.cn）接口-验证短信验证码
 * @param string $msgId 短信ID
 * @param string $code 验证码
 */
function check_sms_code($msgId,$code)
{
    $client = new \JSMS('b761cbd089d72ebff9ab0a13', '905111a3ad005590c0105455');
    $response = $client->checkCode($msgId, $code);
    return $response['body']['is_valid'];
}
/**
 * 添加积分的通用方法，关联用户表。
 * @access public
 * @param int $user_id
 * @param int $type 积分类型
 * @param string $description 描述
 * @param int $count 积分数量
 * @param string $incDec inc增加dec减少
 */
function post_point($userId,$count,$description,$type,$incDec='inc')
{
    $data=array();
    $data['user_id']=$userId;
    $data['count']=$count;
    $data['description']=$description;
    $data['type']=$type;
    $data['add_ip']=$_SERVER['REMOTE_ADDR'];
    if($incDec=="inc"){
        $data['plus_minus']='+';
    }else{
        $data['plus_minus']='-';
    }
    $result=Db::name('user_point')->insertGetId($data);
    unset($data);
    if($result>0)
    {
        if($incDec=="inc")
        {
            Db::name('user')->where('id',$userId)->setInc('point',$count);
        }
        elseif($incDec=="dec"){
            Db::name('user')->where('id',$userId)->setDec('point',$count);
        }
        return true;
    }
    
    return false;
    
}
/*
 * 添加用户金额明细
 * */
function post_user_balance_log($userId,$plusMinus,$money,$description,$type,$mainId)
{
    $user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
    $user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"];
    $data = [
        'user_id'=>$userId,
        'plus_minus' => $plusMinus,
        'money' => $money,
        'description'=>$description,
        'type' => $type,
        'add_ip'=>$user_IP,
        'main_id'=>$mainId
    ];
    Db::name('user_balance')->insert($data);
}
/*
 * 用户分销明细
 * */
function post_distribution_log($userId,$addMoney,$addUserId,$orderNo,$goodsId,$goodsPrice,$goodsTitle="商品",$level=1)
{
    $data = [
        'user_id'=>$userId,
        'add_money'=>$addMoney,
        'add_user_id'=>$addUserId,
        'order_no'=>$orderNo,
        'goods_id'=>$goodsId,
        'goods_sell_price'=>$goodsPrice,
        'goods_title'=>$goodsTitle,
        'level' => $level
    ];
    $nickname = get_user_info_data($userId,'user_nickname');
    if ( Db::name('user_distribution_log')->insert($data)) {
        $id = Db::name('user_distribution_log')->getLastInsID();
        post_user_balance_log($addUserId,"+",$addMoney,"下级用户".$nickname."购买".$goodsTitle."消费".$goodsPrice."获得返利",3,$id);
        return $id;
    } else {
        return false;
    }
}
/**
 * 添加系统消息的方法
 * @access public
 * @param int $user_id
 * @param string $title 消息标题
 * @param string $content 消息内容
 */
function post_system_msg($userId,$title,$content)
{
    $result=Db::name('sys_message')->insertGetId(['user_id'=>$userId,'title'=>$title,'content'=>$content]);
    if($result>0)
    {
        return true;
    }
    
    return false;
}
/**
 * 根据ID获取某个频道Model实体
 * @param int $channelId 频道ID
 * @return array 
 */
function get_channel_model($channelId)
{
    $model=Db::name('sys_channel')->where('id',$channelId)->find();
    return $model;
}
/**
 * 根据ID获取某个分类Model实体
 * @param int $categoryId 分类ID
 * @return array 
 */
function get_category_model($categoryId)
{
    $model=Db::name('sys_category')->where('id',$categoryId)->find();
    return $model;
}
/**
 * 根据ID获取某个管理员Model实体
 * @param int $managerId 管理员ID
 * @return array 
 */
function get_manager_model($managerId)
{
    $model=Db::name('manager')->where('id',$managerId)->find();
    return $model;
}
/*生成用户编号*/
function get_user_username()
{
    $str = 'U'.date('ymdHis',time()).mt_rand(1000,9999);
    return $str;
}
/**
 * 获取单个用户信息
 * @param int $userId 用户ID
 * @return array
 */
function get_user_model($userId)
{
    $data=Db::name('user')->where('id',$userId)->find();
    return $data;
}
/*
 * 获取用户各种信息
 * $type balance
 * */
function get_user_info_data($userId,$type)
{
    return Db::name('user')->where('id',$userId)->value($type);
}
/**
 * 获取文章实体信息
 * @param int $articleId 文章ID
 * @return array
 */
function get_article_model($articleId)
{
    $data=Db::name('article')->where('id',$articleId)->find();
    return $data;
}
/*
 * 系统配置
 * */
function sysconf($name, $value = false)
{
    static $config = [];
    if ($value !== false) {
        $config = [];
        $data = ['name' => $name, 'value' => $value];
        return Db::name('sys_config')->where('name',$name)->update($data);
    }
    if (empty($config)) {
        foreach (Db::name('sys_config')->select() as $vo) {
            $config[$vo['name']] = $vo['value'];
        }
    }
    return isset($config[$name]) ? $config[$name] : '';
}
/**
 * 判断用户是否已经收藏
 * @param int $userId 用户ID
 * @param int $topicId 帖子ID
 * @return bool
 */
function goods_is_collection($userId,$goodsId)
{
    $result=Db::name('goods_collection')->where(['user_id'=>$userId,'goods_id'=>$goodsId])->find();
    if($result){
        return 1;
    }
    return 0;
}
 /*获取购物车数量*/
function get_cart_count($userId)
{
    $result = Db::name('cart')->where('user_id',$userId)->sum('goods_count');
    if ($result>0) {
        return $result;
    } else {
        return 0;
    }
}
/*
 * 获取分类文章信息
 * */
function get_article_data($category_id)
{
    $title = Db::name('sys_category')->where('id',$category_id)->value('title');
    $list = Db::name('article')->where(['channel_id'=>1,'category_id'=>$category_id])->order('id desc')->select();
    $data = [
      'title' => $title,
      'list'=>$list
    ];
    return $data;
}
/*
 * 根据省份编号 获取省份名称
 * */
function province($provinceId)
{
    return Db::name('provinces')->where('provinceid',$provinceId)->value('province');
}
/*
 * 根据城市编号 获取城市名称
 * */
function city($cityId)
{
    return Db::name('cities')->where('cityid',$cityId)->value('city');
}
/*
 * 根据区域编号 获取区域名称
 * */
function area($areaId)
{
    return Db::name('areas')->where('areaid',$areaId)->value('area');
}
/*
 * 根据省份获取邮费
 * */
function get_express_cost($provinceCode)
{
    $where = [
      'status'=>0,
      'provinces_code'=>['like',"%{$provinceCode}%"]
    ];
    $cost = Db::name('sys_express')->where($where)->value('money');
    if ($cost)
    {
        return $cost;
    } else {
        return 0;
    }
}
/*
 * 根据订单金额 获取优惠额度
 * */
function get_coupon_model()
{
    $where = ['status'=>0];
    $coupon = Db::name('coupon')->where($where)->find();
    return $coupon;
}
/*
 * 根据用户ID 获取用户 用户信息
 * */
function get_user_agent($userId)
{
    $data = Db::name('user_distribution')->alias('b')
    ->field('a.user_name,a.status,a.true_name,a.user_nickname,a.avatar,a.mobile,a.type,a.add_ip,a.add_time,b.*')
    ->join('user a','a.id=b.next_user_id')
    ->where('b.user_id',$userId)
    ->order('a.add_time desc')
    ->select();
    if ($data) {
        return $data;
    } else {
        return '';
    }
}
// /*
//  * 根据用户ID 获取用户  一级 二级 三级 代理 的用户信息
//  * */
// function get_user_agent($userId,$lev=0)
// {
//     $lev += 1;
//     static $ret = array();
//     if($lev<=3) {
//         $data = get_user_next_agent_data($userId);
//         if ($data) {
//             foreach ($data as $v) {
//                 $ret[$lev][] = $v;
//                 get_user_agent($v['next_user_id'], $lev);
//             }
//         }
//     }
//     return $ret;
// }

/*
 * 根据用户userId 获取用户的下级信息
 * */
function get_user_next_agent_data($userId)
{
    $data = Db::name('user_distribution')->alias('b')
        ->field('a.user_name,a.status,a.true_name,a.user_nickname,a.mobile,a.type,a.add_ip,a.add_time,b.*')
        ->join('user a','a.id=b.next_user_id')
        ->where('b.user_id',$userId)
        ->order('a.add_time desc')
        ->select();
    if ($data) {
        return $data;
    } else {
        return '';
    }
}
/*
 * 根据用户id获取上级的用户信息
 * */
function get_user_previou($userId)
{
    return Db::name('user_distribution')->where('next_user_id',$userId)->value('user_id');
}
/*获取用户优惠券*/
function get_user_coupon($userId,$status,$money)
{
//    Db::name('user_coupon')->where(['user_id'=>$userId,'status'=>0,'end_time'=>['lt',time()]])->setField('status',3);
    $where = ['user_id'=>$userId];
    if (isset($status)){
        $where['status']=$status;
    }
    if (isset($money))
    {
        $where['coupon_astrict'] = ['elt',$money];
    }
    $coupon = Db::name('user_coupon')->where($where)->select();
    foreach ($coupon as $k=>$v)
    {
        $coupon[$k]['start_time'] = date('Y-m-d',$v['start_time']);
        $coupon[$k]['end_time'] = date('Y-m-d',$v['end_time']);
    }
    return $coupon;
}
/**
 * 模拟post进行url请求
 * @param string $url
 * @param array $post_data
 */
function request_post($url,$data)
{
    $curl = curl_init();
    curl_setopt($curl,CURLOPT_URL,$url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    //启用时会发送一个常规的POST请求,为1或者为true
    if(!empty($data)){
        curl_setopt($curl,CURLOPT_POST,1);
        curl_setopt($curl,CURLOPT_POSTFIELDS,$data);//需要要传送的内容
    }
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
    $return_str = curl_exec($curl);
    curl_close($curl);
    return $return_str;
}
/**
 * 模拟get进行url请求
 * @param string $url
 */
function request_get($url){
    $ch = curl_init();
    //设置选项，包括URL
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    //执行并获取HTML文档内容
    $output = curl_exec($ch);
    //释放curl句柄
    curl_close($ch);
    return $output;
}
/*
 * 获取最低的业绩金额
 * $type min  2  max
 * */
function get_grade_amount($type)
{
    if ($type == 'min')
    {
        return Db::name('admin_ratio')->order('min asc')->value('min');
    } else {
        return Db::name('admin_ratio')->order('min desc')->value('min');
    }
}
/**
 * 给接口图片拼接url
 * @param array  $data 数组
 * @param string $key 数组键名
 * @param string $type 1 多维数组 2 一维数组
 * */
function edit_img_url($data='',$key='',$type=1)
{
    if ($type == 1)
    {
      foreach($data as $k=>$v){
          $data[$k][$key] = sysconf('website').$v[$key];
      }
    } else {
        $data[$key] = sysconf('website').$data[$key];
    }
    return $data;
}
/**
 * 格式化print_r打印数据
 * @param array $data
 */

 function p($data){
    echo "<pre>";
    print_r($data);die;
 }

/**
 * 格式化var_dump打印数据
 * @param array $data
 */

function pv($data)
{
    echo "<pre>";
    var_dump($data);
    die;
}